import request from '@/utils/request'
import { Loading } from 'element-ui'
export function fetchList(listForm, funcs, isList, method) {
  funcs = funcs || {}
  console.log('this.listQuery', listForm.listQuery)
  listForm.listLoading = true
  let returnData = null
  request({
    url: listForm.url,
    method: 'get',
    params: listForm.listQuery
  }).then(response => {
    /** todo: 处理code不同值的情况 0 是成功 其他情况提示**/
    if (response.code === 0) {
      listForm.list = isList ? response.data : response.data.records
      listForm.total = response.data.total
      listForm.listLoading = false
      funcs.success && funcs.success(listForm.list)
    }
    returnData = response.data
    console.log('response.data', response.data)
  }).catch(response => {
    /** 处理后台返回失败的情况**/
    listForm.list = []
    listForm.total = 0
    listForm.listLoading = false
    console.log('后台报错', response)
  })
  return returnData
}
// 参数 vueThis：this formStr:form表单数据字符串，reqFunc提交的函数
export function saveQuit(vueThis, formStr, reqFunc) {
  // 表单检验
  vueThis.$refs[formStr].validate((valid) => {
    if (valid) {
      const text = vueThis.submitButton.text

      ajaxSend(vueThis, reqFunc, vueThis[formStr], {
        before: function() {
          vueThis.submitButton.status = true
          vueThis.submitButton.text = text + '中'
        },
        after: function() {
          vueThis.submitButton.status = false
          vueThis.submitButton.text = text
          vueThis.$emit('refreshDataList')
        },
        fail: function() {
          vueThis.submitButton.status = false
          vueThis.submitButton.text = text
        }
      })
    }
  })
}
// 参数 vueThis：this formStr:form表单数据字符串，reqFunc提交的函数
export function handleBtnClick(vueThis, reqFunc, data, confirmType, btnFuncs) {
  btnFuncs = btnFuncs || {}
  const confirmText = {
    'del': '此操作将永久删除该数据, 是否继续?'
  }
  const funcs = {
    success: function(data) {
      if (!btnFuncs.success || btnFuncs.success && btnFuncs.success(data)) {
        vueThis.getList()
        return true
      }
    }
  }
  if (!confirmType) {
    ajaxSend(vueThis, reqFunc, data, funcs)
  } else {
    vueThis.$confirm(confirmText[confirmType] || '是否确认要执行' + confirmType + '操作', '提示', {
      confirmButtonText: '确定',
      cancelButtonText: '取消',
      type: 'warning'
    }).then(() => {
      ajaxSend(vueThis, reqFunc, data, funcs)
    }).catch(() => {
      vueThis.$message({
        type: 'info',
        message: '已取消删除'
      })
    })
  }
}
// 参数 vueThis：this  data：提交的数据  reqFunc： 提交的函数  funcs： 其他函数（非必填）
export function ajaxSend(vueThis, reqFunc, data, funcs) {
  funcs = funcs || {}
  let loadingInstance
  // 没有before函数定义或者before执行后返回true，仍然执行默认按钮显示切换
  if (!funcs.before || funcs.before && funcs.before()) {
    loadingInstance = Loading.service({ fullscreen: true })
  }
  console.log('提交地址+数据', reqFunc, data)
  reqFunc(data).then(({ code, msg, data }) => {
    console.log('返回', code, msg, data)
    vueThis.$nextTick(() => {
      loadingInstance && loadingInstance.close()
    })
    if (code === 0) {
      // 没有success函数定义或者success执行后返回true，仍然执行默认成功提示
      if (!funcs.success || funcs.success && funcs.success(data)) {
        vueThis.$message({
          message: msg,
          type: 'success',
          duration: 1000,
          onClose: () => {
            // 没有after函数定义或者after执行后返回true，仍然执行默认自动回调保存成功方法
            if (!funcs.after || funcs.after && funcs.after()) {
              // 默认不做处理
            }
          }
        })
      }
    } else {
      // 没有fail函数定义或者fail执行后返回true，仍然执行默认按钮显示切换
      if (!funcs.fail || funcs.fail && funcs.fail()) {
        vueThis.$message.error(msg)
      }
    }
  }).catch((e) => {
    vueThis.$nextTick(() => {
      loadingInstance && loadingInstance.close()
    })
    if (!funcs.fail || funcs.fail && funcs.fail()) {
      console.log('fail 预留', e)
    }
  })
}

export function formatDate(date, fmt) {
  if (!date) { return null }
  if (/(y+)/.test(fmt)) {
    fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
  }
  const o = {
    'M+': date.getMonth() + 1,
    'd+': date.getDate(),
    'h+': date.getHours(),
    'm+': date.getMinutes(),
    's+': date.getSeconds()
  }
  for (const k in o) {
    if (new RegExp(`(${k})`).test(fmt)) {
      const str = o[k] + ''
      fmt = fmt.replace(RegExp.$1, RegExp.$1.length === 1 ? str : padLeftZero(str))
    }
  }
  return fmt
}

function padLeftZero(str) {
  return ('00' + str).substr(str.length)
}
